// #ifdef H5
// h5端
import Fly from 'flyio/dist/npm/fly'
// #endif

// #ifdef APP-PLUS
// app端
import Fly from 'flyio/dist/npm/wx'
// #endif

// // #ifdef MP-WEIXIN
// import Fly from 'flyio/dist/npm/wx'
// // #endif
// #ifdef MP
import Fly from 'flyio/dist/npm/wx'
// #endif


import store from '../store'
import {
	handleLoginFailure
} from '@/utils'
import {
	VUE_APP_API_URL
} from '@/config'
import cookie from '@/utils/store/cookie'
import {
	$encruption,
	$decryption,
	$encruption1,
	$decryption1
} from '@/utils/jsencrypt';
const fly = new Fly()
fly.config.baseURL = VUE_APP_API_URL

// 小程序测试请求域名
// #ifdef MP-WEIXIN
// fly.config.baseURL = 'http://29e25012l6.qicp.vip/api'
// #endif

// #ifdef APP-PLUS
// app端
// fly.config.baseURL = 'http://29e25012l6.qicp.vip/api'
// #endif

fly.interceptors.response.use(
	response => {
		// console.log(response)
		// 定时刷新access-token
		return response
	},
	error => {
		console.log(error)
		if (error.toString() == 'Error: Network Error') {
			console.log('————————')
			console.log('请求失败', error)
			console.log('————————')
			handleLoginFailure()
			return Promise.reject({
				msg: '未登录',
				toLogin: true
			})
		}
		if (error.status == 400) {
			
			uni.showToast({
				title: error.response.data.msg,
				icon: 'none',
				duration: 2000,
			})
			setTimeout(() => {
				uni.navigateTo({
					url:'/bundle/pages/my/memberCenter'
				})
			}, 1000)
		
		}
		
		
		if (error.status == 401) {
			console.log('————————')
			console.log('登录失效 401', error)
			console.log('————————')
	uni.navigateTo({
						url: '/pages/login/login'
					})
			// handleLoginFailure()
			return Promise.reject({
				msg: '未登录',
				toLogin: true
			})
		}
		if (error.status == 402) {
	
			uni.showToast({
				title: error.response.data.msg,
				icon: 'none',
				duration: 2000,
			})
		}
		if (error.response.data.status == 5109) {
			uni.showToast({
				title: error.response.data.msg,
				icon: 'none',
				duration: 2000,
			})
		}
		return Promise.reject(error)
	}
)

const defaultOpt = {
	login: true
}

function baseRequest(options) {
	// 从缓存中获取 token 防止 token 失效后还会继续请求的情况

	// var login_status = cookie.get('login_status')
	// var  token1=cookie.get('login_status')

	// if(login_status){
	//  // console.log('login_status',login_status)
	//   // const encode = $encruption(login_status);
	//   // console.log('加密encode',encode)

	//   const edcode = $decryption(login_status);
	//    // console.log('解密encode',edcode)
	//   const encode1 = $encruption1(edcode);
	//    // console.log('加密encode1',encode1)
	//    // const token = cookie.get('login_status')
	//    // const edcode1 = $decryption1(encode1);
	//    //  console.log('解密edcode1',edcode1)
	//  token1 = encode1
	//   // const token = cookie.get('login_status')
	// }else{
	//  token1 = cookie.get('login_status')
	// }
	const token = uni.getStorageSync('token')
	var version1 = '1.0.0'
	// plus.runtime.getProperty(plus.runtime.appid, (info) => {

	// 				console.log(info.version)
	// 		version1 = info.version
	// 		})
	const version = version1
	// 合并传参过来的 headers
	// 如果接口需要登录，携带 token 去请求


	options.headers = {
		...options.headers,
		// hahah: 'Bearer2 ',
	}
	// if(options.method=='post'){
	//   options.headers.hahah='Bearer2 '
	// }

	// 'Bearer '+
	if (options.login === true) {
		options.headers = {
			...options.headers,
			token: token,
		}
	}
	if (options.isForm === true) {
		options.headers = {
			...options.headers,
			'content-type': 'application/json',
		}
	}
	options.headers['version'] = version


	// console.log(options)
	// // 如果需要登录才可访问的接口没有拿到 token 视为登录失效
	// if (options.login === true && !token) {
	//   // 跳转到登录或授权页面
	//   handleLoginFailure()
	//   // 提示错误信息
	//   return Promise.reject({ msg: '未登录', toLogin: true })
	// }
	// 结构请求需要的参数
	const {
		url,
		params,
		data,
		login,
		...option
	} = options

	// 发起请求
	return fly
		.request(url, params || data, {
			...option,
		})
		.then(res => {
			const data = res.data || {}

			if ([1, 101].includes(Number(data.code))) {
				return Promise.resolve(data, res)
			} else {

				if (data.code == 401) {
					uni.navigateTo({
						url: '/pages/login/login'
					})
				}
				if (data.code == 402) {
					uni.showToast({
						title: res.data.msg,
						icon: 'none'
					})
				
				} 
				if (data.code == 1001) {
					uni.showToast({
						title: res.data.msg,
						icon: 'none'
					})
					uni.navigateTo({
						url: '/pages/my/settingps'
					})
				} else if (data.code == 1003) {
					uni.showToast({
						title: res.data.msg,
						icon: 'none'
					})
					uni.navigateTo({
						url: '/pages/my/realnameauthent'
					})
				} else {
					uni.showToast({
						title: res.data.msg,
						icon: 'none'
					})
				}
				return Promise.reject({
					msg: res.data.msg,
					res,
					data
				})
			}
			//     if (res.code !== 1) {
			//   uni.showToast({
			//   	title:res.data.msg,
			//   			icon:'none'
			//   })
			//       return Promise.reject({ msg: '请求失败', res, data })
			//     }

			//     if ([401, 403].indexOf(data.code) !== -1) {
			//   uni.showToast({
			//   	title:res.data.msg,
			//   			icon:'none'
			//   })
			//       handleLoginFailure()
			//       return Promise.reject({ msg: res.data.msg, res, data, toLogin: true })
			//     } else if (data.code === 1) {
			//       return Promise.resolve(data, res)
			//     } else if (data.code == 5101) {
			//   uni.showToast({
			//   	title:res.data.msg,
			//   			icon:'none'
			//   })
			//       return Promise.reject({ msg: res.data.msg, res, data })
			//     } else {
			//   uni.showToast({
			//   	title:res.data.msg,
			// 	icon:'none'
			//   })
			//       return Promise.reject({ msg: res.data.msg, res, data })
			//     }
		})
}

/**
 * http 请求基础类
 * 参考文档 https://www.kancloud.cn/yunye/axios/234845
 *
 */
const request = ['post', 'put', 'patch'].reduce((request, method) => {
	/**
	 *
	 * @param url string 接口地址
	 * @param data object get参数
	 * @param options object axios 配置项
	 * @returns {AxiosPromise}
	 */
	request[method] = (url, data = {}, options = {}) => {
		return baseRequest(Object.assign({
			url,
			data,
			method
		}, defaultOpt, options))
	}
	return request
}, {});

['get', 'delete', 'head'].forEach(method => {
	/**
	 *
	 * @param url string 接口地址
	 * @param params object get参数
	 * @param options object axios 配置项
	 * @returns {AxiosPromise}
	 */
	request[method] = (url, params = {}, options = {}) => {
		return baseRequest(Object.assign({
			url,
			params,
			method
		}, defaultOpt, options))
	}
})

export default request